﻿namespace Tszy.Unlimited.Base.Infrastructure.Domain;

/// <summary>
/// 领域根。
/// </summary>
public interface IAggregateRoot
{
    /// <summary>
    /// 领域事件集合。
    /// </summary>
    IReadOnlyCollection<IDomainEvent> DomainEvents { get; }

    /// <summary>
    /// 应用领域事件。
    /// </summary>
    /// <param name="domainEvent">领域事件。</param>
    /// <returns>领域模型。</returns>
    IAggregateRoot ApplyEvent(IDomainEvent domainEvent);

    /// <summary>
    /// 清除所有事件修改信息。
    /// </summary>
    void ClearEvents();
}